package com.edu.test;

import com.edu.bean.Student;
import org.junit.Test;

import java.lang.reflect.Field;
import java.util.Random;

/**
 * @Author:mx
 * @Date:2025/11/4-11:27:52
 */
public class MyTest3 {

    /*
    *       获取 Field 对象的 方法
    *           首先获取到 Class对象
    *           通过 Class对象 获取 Field对象
    *
    * */
    @Test
   public void test01() throws Exception{
            Class clazz = Class.forName("com.edu.bean.User");
            // getFields() 方法  获取 该类型中 所有的 公有的属性
            Field[] fields = clazz.getFields(); //获取 所有 公有的属性（父类的公有属性）
            for (Field field : fields) {
                System.out.println(field.getName());
                System.out.println(field.getDeclaringClass());
            }
            // 指定属性名 获取 对应公有属性的 属性对象
//           Field f1 =  clazz.getField("userId");
//            System.out.println(f1.getModifiers());
//            // 获取 所有的 属性 Field[]
            Field[] declaredFields = clazz.getDeclaredFields(); //获取到 该类自身的 公有和私有属性
            for (Field field : declaredFields) {
                System.out.println(field.getName());
                System.out.println(field.getDeclaringClass());
            }
//            Field f2 = clazz.getDeclaredField("username");
    }

    //Field对象的常用方法
    @Test
    public void test02() throws Exception{
        Class clazz = Class.forName("com.edu.bean.User");
        Field userId = clazz.getDeclaredField("userId");
        System.out.println(userId.getName());//获取属性名
        System.out.println(userId.getType());//属性的数据类型
        System.out.println(userId.getModifiers());//获取属性的访问修饰符
        //设置一个对象的该属性的属性值。
        Object o = clazz.newInstance();
        userId.setAccessible(true);
        userId.set(o,1);

        Field username = clazz.getDeclaredField("username");
        username.setAccessible(true);
        username.set(o,"zhangsan");
        System.out.println(o);

    }


    @Test
    public void test04() throws NoSuchFieldException, IllegalAccessException {
        Student student = new Student();
        student.setStuId(25);
        Class studentClass = Student.class;
        Field id = studentClass.getDeclaredField("stuId");
        id.setAccessible(true);
        Object result = id.get(student);
        System.out.println(result);
    }
}
